-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 1----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ScktComp, Spin, shellapi, mmsystem, ComCtrls, Menus;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    ServerSocket1: TServerSocket;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Edit2: TEdit;
    SpinEdit1: TSpinEdit;
    Label3: TLabel;
    Label4: TLabel;
    Edit3: TEdit;
    Label5: TLabel;
    CheckBox1: TCheckBox;
    Edit4: TEdit;
    Label6: TLabel;
    Edit5: TEdit;
    Button4: TButton;
    Button5: TButton;
    Timer1: TTimer;
    Label7: TLabel;
    Label8: TLabel;
    Edit6: TEdit;
    Button6: TButton;
    Button7: TButton;
    SpinEdit2: TSpinEdit;
    CheckBox2: TCheckBox;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Edit1: TMemo;
    Button11: TButton;
    Button12: TButton;
    StatusBar1: TStatusBar;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    ListBox1: TListBox;
    Edit7: TEdit;
    Label9: TLabel;
    Button16: TButton;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Exit1: TMenuItem;
    Exit2: TMenuItem;
    Cliemt1: TMenuItem;
    Server1: TMenuItem;
    Help1: TMenuItem;
    Clearwindow1: TMenuItem;
    Connect1: TMenuItem;
    Disconnect1: TMenuItem;
    Sendclient1: TMenuItem;
    Clearwindow2: TMenuItem;
    Sendline1: TMenuItem;
    Activate1: TMenuItem;
    Banlist1: TMenuItem;
    Clearban1: TMenuItem;
    Flushban1: TMenuItem;
    Servercfg1: TMenuItem;
    Help2: TMenuItem;
    ReadMe1: TMenuItem;
    Hidewindow1: TMenuItem;
    Deactivate1: TMenuItem;
    Button17: TButton;
    Label10: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button3Click(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CheckBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure openURL;
    procedure openDIR;
    procedure openEXE;
    procedure delBan(var s : string);
    procedure editfile;
    procedure Timer1Timer(Sender: TObject);
    procedure delfile;
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Edit2DblClick(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure mkfile;
    procedure Cfile;
    procedure clearban;
    procedure PBlockWrite(var text : string);
    procedure sendtext(var path : string);
    procedure loadinfo;
    procedure saveinfo;
    procedure terminate;
    procedure SendLogFile;
    procedure editmodeend;
    procedure ServerStart;
    procedure Button10Click(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Button12Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Fexists(var Fexstring : string);
    procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Memo2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button12MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button11MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure CheckBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button8MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button9MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button10MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button7MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit3MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure SpinEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure CheckBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit6MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure SpinEdit2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button6MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label8MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit4MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit3DblClick(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button13MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button14Click(Sender: TObject);
    procedure Edit5MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button14MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Exit2Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure Clearwindow1Click(Sender: TObject);
    procedure Connect1Click(Sender: TObject);
    procedure Disconnect1Click(Sender: TObject);
    procedure Sendclient1Click(Sender: TObject);
    procedure Clearwindow2Click(Sender: TObject);
    procedure Sendline1Click(Sender: TObject);
    procedure Activate1Click(Sender: TObject);
    procedure Deactivate1Click(Sender: TObject);
    procedure Servercfg1Click(Sender: TObject);
    procedure Banlist1Click(Sender: TObject);
    procedure Clearban1Click(Sender: TObject);
    procedure Flushban1Click(Sender: TObject);
    procedure Hidewindow1Click(Sender: TObject);
    procedure ReadMe1Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var


  Form1: TForm1;
  auth : boolean;
  URLstring : Pchar;
  DIRstring : PChar;
  EXEstring : Pchar;
  delstring : string;
  mkfilestring : string;
  Cfilestring : string;
  t : integer;
  banned : array of string;
  bannedb : boolean;
  standardpass : string;
  host, service, port, pass : string;
  flush : boolean;
  connect : boolean;
  editpathnext : boolean;
  editpath : string;
  addstring : string;
  block : boolean;
  stext : boolean;


  dir, url, exe, del, mkf, Cfi, noauth,
  serverpass, quietmode, Fex, editF, editprog : boolean;

implementation

uses Unit2, Unit3, Unit4, Unit6;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin

with clientsocket1 do begin
host := edit2.Text;
port := spinedit1.Value;
service := edit3.Text;
Active := true;


end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Clientsocket1.Active := false;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
caption := 'Connected to ' + clientsocket1.Host + ' on port ' + inttostr(Clientsocket1.Port);
button1.Enabled := false;
button2.Enabled := true;

edit2.Enabled := false;
edit3.Enabled := false;
spinedit1.Enabled := false;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin

caption := 'Client - Server remote comander';
button2.Enabled := false;
button1.Enabled := true;
Showmessage('Disconnected from ' + clientsocket1.Host);

if checkbox2.Checked = true then
begin
memo1.Lines.SaveToFile('C:\client log from ' + datetostr(date) +'.txt');
memo1.Lines.Clear;
end;

edit2.Enabled := true;
edit3.Enabled := true;
spinedit1.Enabled := true;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
c : string;
begin
c := socket.ReceiveText;

if label10.Caption = 'rec text' then begin
form6.Memo1.Lines.Clear;
form6.Memo1.Lines.Add(c);
label10.Caption := '';
end;


memo1.Lines.Add(c);

end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
  VAR
  a : integer;

begin

bannedb := false;

for a := 0 to length(banned) -1 do
begin

if socket.RemoteAddress = banned[a] then bannedb := true


end;

if bannedb = false then
begin


if quietmode = false then

if form3.Memo1.Text = '' then socket.SendText('welcome to ver 1.0 remote ' +
'comander') else socket.SendText(form3.Memo1.Text);

end else begin

if form3.Memo3.Text = '' then socket.SendText('You have been banned from this ' +
'server!') else socket.SendText(form3.Memo3.Text);


//terminate;

end;



end;

procedure TForm1.Button3Click(Sender: TObject);
begin
clientsocket1.Socket.SendText(Edit1.Text);
if edit1.text = 'exit' then clientsocket1.Active := false;
edit1.Text := '';
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);

Var
s : string;


begin
s := socket.ReceiveText;
if s = edit4.Text then
begin

if bannedb = false then auth := true;

end;

if auth = true then begin

if stext = true then
begin
sendtext(s);
stext := false;
end else

if block = true then
begin
PBlockWrite(s);
block := false;
end else

if editprog = true then
begin

        if s = 'end edit' then editmodeend else begin


        if s = 'block text' then block := true else begin

        if s = 'send text' then stext := true else begin

        addstring := s;
        editfile;

        end;

        end;

        end;

end else

if s = 'helo' then Socket.SendText('200 : Im listening') else
if s = 'noop' then Socket.SendText('200 : noop return') else
if s = edit4.Text then Socket.SendText('200 : password auth, welcome!') else

if s = 'editfile' then
begin
Socket.SendText('200 : send file path to edit');
editf := true;
end else

if s = 'clearban' then
begin
Socket.SendText('200 : clearing ban lists');
Clearban;
end else

if s = 'exitwindows' then
begin
Socket.SendText('200 : exeting windows');
ExitWindowsex(EWX_SHUTDOWN, 0);
end else

if s = 'openCD' then
begin
Socket.SendText('200 : opening CD');
mciSendstring('SET CDAUDIO DOOR OPEN WAIT',nil,0, Self.Handle);
end else

if s = 'closeCD' then
begin
Socket.SendText('200 : closing CD');
mciSendstring('SET CDAUDIO DOOR CLOSED WAIT',nil,0, Self.Handle);
end else

if s = 'fexists' then
begin
Fex := true;
Socket.SendText('200 : send path to check');
end else

if s = 'quietmodeon' then
begin
quietmode := true;
Socket.SendText('200 : quiet mode is ON');
end else

if s = 'quietmodeoff' then
begin
quietmode := false;
Socket.SendText('200 : quiet mode is OFF');
end else

if s = 'noauth' then
begin
Socket.SendText('200 : no auth. active');
noauth := true
end else

if s = 'execurl' then
begin
url := true;
Socket.SendText('200 : please send URL');
end else

if s = 'serverpass' then
begin
serverpass := true;
Socket.SendText('200 : please send new pass');
end else

if s = 'execdir' then begin
dir := true;
Socket.SendText('200 : please send path to DIR');
end else

if s = 'execexe' then begin
exe := true;
Socket.SendText('200 : please send path to EXE');
end else

if s = 'del' then begin
del := true;
Socket.SendText('WARN : this comand will delete files, send "abort" to abort comand');
Socket.SendText('200 : please send path to file to delete');
end else

if s = 'mkfile' then begin
mkf := true;
Socket.SendText('200 : please send path and name to new file');
end else

if s = 'cfile' then begin
Cfi := true;
Socket.SendText('200 : please send path to file you want see');
end else

        if editf = true then begin
        editpath := s;
        //Form6.caption := s;
        editprog := true;
        editf := false;
        end else

        if url = true then begin
        urlstring := (PChar(s));
        openURL;
        url := false;
        end else

        if Fex = true then begin
        Fexists(s);

        Fex := false;
        end else

        if serverpass = true then begin
        edit4.Text := s;
        serverpass := false;
        Socket.SendText('200 : pass is now "' + edit4.Text + '"');
        end else

        if dir = true then begin
        dirstring := (PChar(s));
        openDIR;
        dir := false;
        end else

        if exe = true then begin
        exestring := (PChar(s));
        openEXE;
        exe := false;
        end else

        if del = true then begin
        delstring := s;
        delfile;
        del := false;
        end else

        if mkf = true then begin
        mkfilestring := s;
        mkfile;
        mkf := false;
        end else

        if Cfi = true then begin
        cfilestring := s;
        Cfile;
        cfi := false;
        end else


if s = 'shutdown' then begin
Socket.SendText('200 : Signing of...');
Checkbox1.Checked := false;
end else

if s = 'sendlog' then begin
Socket.SendText('200 : sending logfile');
sendlogfile;
end

else socket.SendText('Unrecognized comand: ' + s);

end else begin

if bannedb = true then begin
if form3.Memo2.Text = '' then Socket.SendText('ERR : you have been banned!') else
Socket.SendText(form3.Memo2.Text);


end else

Socket.SendText('ERR : no auth!');



if bannedb = false then begin

t := t + 1;

if t = form3.SpinEdit1.Value then
begin
Socket.SendText('ERR : pass limit hit, your history!');
t := 0;

setlength(banned, length(banned) + 1);
banned[length(banned) - 1] := socket.RemoteAddress;

Serversocket1.Active := false;

Serversocket1.Active := true;

end;


end;




end;

memo2.Lines.Add(s);
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin

if not noauth = true then auth := false;
if checkbox2.Checked = true then memo2.Lines.SaveToFile('C:\server log from ' + datetostr(date) + '.txt');

end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 13 then begin

if edit1.text = 'exit' then clientsocket1.Active := false else

if editpathnext = true then begin
button17.Click;
form6.Caption := edit1.Text;
end else

if edit1.Text = 'editfile' then editpathnext := true;

clientsocket1.Socket.SendText(Edit1.Text);


edit1.Text := '';
end;

end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin


if checkbox1.Checked = true then begin

if edit4.Text = '' then begin
showmessage('ERR : No password!');
checkbox1.Checked := false;
end else begin

with serversocket1 do begin
port := spinedit1.Value;
service := edit3.Text;
Active := true;
end;
edit4.Enabled := false;
end;

end else begin
serversocket1.Active := false;
edit4.Enabled := true;
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
Var
param : string;
f : file of char;
temp : char;
a : integer;
b : integer;

go : integer;

begin
flush := false;
auth := false;
noauth := false;
quietmode := false;
t := 0;


param := Paramstr(1);

if param <> '' then
begin

if param = '-readme' then Shellexecute(handle, 'open', 'ReadMe!.txt', nil, nil, SW_SHOWDEFAULT) else
if param = '-startserver' then  Serverstart else
if param = '-info' then loadinfo else

showmessage('Unknovn parameter: ' + param);
end;

a := 0;
setlength(banned, length(banned) + 1);
assignfile(f, 'bann.cfg');

ReSet(f);

repeat

read(f, temp);

if temp = ';' then begin
a := a + 1;
setlength(banned, length(banned) + 1);
end else

if temp <> ':' then banned[a] := banned[a] + temp;

until temp = ':';

go := 0;


for b := 0 to length(banned) - 1 do
begin

if banned[a] = '' then go := go + 1;

end;

if go > 15 then
begin
showmessage('Mabye its time to flush the bannfile?' + chr(13) +
'Do this by pressing "Flush Ban"' + chr(13) + 'Flushing the bannfile will prevent ' +
'the bannfile from growing too large and make the program start faster!');
end;


end;

procedure TForm1.Button4Click(Sender: TObject);
begin
clientsocket1.Socket.SendText(Edit5.Text);
edit5.Text := '';
end;

procedure Tform1.openURL;
begin
if URLstring = '' then
begin
serversocket1.Socket.Connections[0].SendText('err : URL is invalid!');
end else begin
ShellExecute(handle, 'open', URLstring, nil, nil, SW_SHOWDEFAULT);
serversocket1.Socket.Connections[0].SendText('200 : comand executed');
end;

end;


procedure Tform1.openDIR;
begin

if DIRstring = '' then
begin
serversocket1.Socket.Connections[0].SendText('err : DIR path is invalid!');
end else begin
ShellExecute(handle, 'open', DIRstring, nil, nil, SW_SHOWDEFAULT);
serversocket1.Socket.Connections[0].SendText('200 : comand executed');
end;

end;

procedure TForm1.openEXE;
begin

if exestring = '' then
begin
serversocket1.Socket.Connections[0].SendText('err : EXE path is invalid!');
end else begin
ShellExecute(handle, 'open', EXEstring, nil, nil, SW_SHOWDEFAULT);
serversocket1.Socket.Connections[0].SendText('200 : comand executed');
end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//if url = true then label7.Caption := 'true' else label7.Caption := 'false';

if serversocket1.Active = true then label8.Caption := 'Server is: Active' else label8.Caption := 'Server is: Inactive';

if edit1.Text = '' then begin
button3.Enabled := false;
end else button3.Enabled := true;

//if length(banned) > 0 then label7.Caption := banned[0];
if listbox1.Items.Count > 0 then
//Label7.Caption := listbox1.Items.Strings[1];
label9.Caption := inttostr(listbox1.items.count);
end;

procedure TForm1.delfile;
begin
if delstring = 'abort' then
begin
serversocket1.Socket.Connections[0].SendText('200 : DEL comand aborted');
end else begin
Deletefile(delstring);
serversocket1.Socket.Connections[0].SendText('200 : comand executed');
end;

end;

procedure TForm1.Button6Click(Sender: TObject);
begin
serversocket1.Socket.Connections[spinedit2.Value].SendText(edit6.Text);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
form1.Hide;
form2.show;
end;

procedure TForm1.Edit2DblClick(Sender: TObject);
begin
Loadinfo;

end;

procedure TForm1.Button8Click(Sender: TObject);
begin
memo2.Lines.Clear;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
memo1.Lines.Clear;
end;

procedure TForm1.mkfile;
begin

filecreate(mkfilestring);
serversocket1.Socket.Connections[0].SendText('200 : comand executed');

end;

procedure TForm1.Cfile;
var
f : file of char;
returnstring : string;
temp : char;
begin
Assignfile(f, cfilestring);

ReSet(f);

repeat

Read(f, temp);
returnstring := returnstring + temp;

until EoF(f);

serversocket1.Socket.Connections[0].SendText(returnstring);
serversocket1.Socket.Connections[0].SendText('200 : EoF');
end;

procedure TForm1.SendLogFile;
begin
serversocket1.Socket.Connections[0].SendText(memo2.Lines.Text);
serversocket1.Socket.Connections[0].SendText('200 : EoF');
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
ShellExecute(handle, 'open', '/ReadMe!.txt', nil, nil, SW_SHOWDEFAULT);
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
{if key = 13 then begin

clientsocket1.Socket.SendText(Edit1.Text);
if edit1.text = 'exit' then clientsocket1.Active := false;

edit1.Text := '';
end; }

end;

procedure TForm1.Button12Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
Edit2.Text := '';
Edit3.Text := '';
Spinedit1.Value := 0;
if not serversocket1.Active = true then edit4.Text := '';
end;

procedure Tform1.Fexists(var Fexstring : string);
begin

if Fileexists(Fexstring) then
serversocket1.Socket.Connections[0].SendText('200 : file does exists')

else serversocket1.Socket.Connections[0].SendText('200 : file does NOT exists');

end;

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Client window';
end;

procedure TForm1.Memo2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Server window';
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := '';
end;

procedure TForm1.Button12MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Quit Server & Client';
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if button1.Enabled = true then begin

Statusbar1.SimpleText := 'Connect to server ' + Edit2.Text;

end;

end;

procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

if button2.Enabled = true then begin

Statusbar1.SimpleText := 'Disconnect from server ' + Edit2.Text;

end;


end;

procedure TForm1.Button11MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

Statusbar1.SimpleText := 'Clear "Host", "Service", "Port" and "Password"';

end;

procedure TForm1.CheckBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Activate server';
end;

procedure TForm1.Button8MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Clear server window from text';
end;

procedure TForm1.Button9MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Clear client window from text';
end;

procedure TForm1.Button10MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Opens the readme file (if found)';
end;

procedure TForm1.Button7MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Opens a smaller window and hides this one';
end;

procedure TForm1.Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Type in the host name here (you can dubble click here to load the default settings)';
end;

procedure TForm1.Edit3MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Type in the service here! (you can dubbel click here to save te default settings)';
end;

procedure TForm1.SpinEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Type in the portnumber here';
end;

procedure TForm1.CheckBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Disable this checkbox if you dont want logs to be created';
end;

procedure TForm1.Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Click here to send the line i the text box to the left';
end;

procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Type in your command here (hit "enter" to confirm)';
end;

procedure TForm1.Edit6MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Type in a line to send to the selected client';
end;

procedure TForm1.SpinEdit2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Select client to send line to here';
end;

procedure TForm1.Button6MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Send line to selected client';
end;

procedure TForm1.Label8MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Indicates the server state';
end;

procedure TForm1.Edit4MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Type in the server password here';
end;

procedure TForm1.terminate;
begin

ServerSocket1.Socket.close;


end;

procedure TForm1.loadinfo;
VAR
f : file of char;
temp : char;
hostfromfile, tempint: string;
portfromfile : integer;
Servicefromfile : string;
begin
AssignFile(f, 'nfo.txt');
reset(f);

repeat

read(F, temp);
if temp = ';' then edit2.Text := hostfromfile else hostfromfile := hostfromfile + temp;

until temp = ';';


repeat

read(f, temp);
if temp = ';' then
begin
portfromfile := strtoint(tempint);
spinedit1.Value := portfromfile;
end else tempint := tempint + temp;

until temp = ';';

repeat

read(F, temp);
if temp = ';' then edit3.Text := Servicefromfile else Servicefromfile := Servicefromfile + temp;

until temp = ';';


repeat

read(f, temp);

if temp = ';' then edit4.text := standardpass else standardpass := standardpass + temp

until temp = ';';



closefile(f);

end;

procedure Tform1.ServerStart;
begin
loadinfo;

//serversocket1.Active := true;

checkbox1.Checked := true;

end;

procedure Tform1.saveinfo;{(var host, service, port,
 pass : string)}

Var
f : file of char;
temp : char;
a : integer;
marker : char;

begin

marker := ';';




if fileexists('nfo.txt') = true then begin


AssignFile(f, 'nfo.txt');

ReWrite(f);

for a := 1 to length(host) do
begin
temp := host[a];
Write(f, temp);

end;
Write(f, marker);

for a := 1 to length(port) do
begin
temp := port[a];
Write(f, temp);

end;

write(f, marker);

for a := 1 to length(service) do
begin
temp := service[a];
Write(f, temp);

end;

write(f, marker);

for a := 1 to length(pass) do
begin
temp := pass[a];
Write(f, temp);

end;
write(f, marker);

closefile(f);

end else begin
filecreate('nfo.txt');



saveinfo;


end;

end;

procedure TForm1.Edit3DblClick(Sender: TObject);
begin
host := edit2.Text;
service := edit3.Text;
port := inttostr(spinedit1.value);
pass := edit4.Text;
saveinfo;


end;

procedure TForm1.Button13Click(Sender: TObject);
begin
form3.show;
end;

procedure TForm1.Button13MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Settings for the server';
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
VAR
f : file of char;
temp : char;
a : integer;
b : integer;
marker : char;
finalmarker : char;
begin
marker := ';';
finalmarker := ':';

assignfile(f, 'bann.cfg');

ReWrite(f);


 for a := 0 to length(banned) - 1 do
 begin


        for b := 1 to length(banned[a]) do
        begin
        temp := banned[a, b];

        write(f, temp);

        end;
  if a = length(banned) - 1 then write(f, finalmarker) else write(f, marker);
 end;


closefile(f);



end;

procedure TForm1.Button14Click(Sender: TObject);
begin
Clearban;

end;

procedure Tform1.clearban;
VAR
f : file of char;
colon : char;
begin
colon := ':';

AssignFile(f, 'bann.cfg');

ReWrite(f);

Write(f, colon);

Closefile(f);

Setlength(banned, 1);

banned[0] := '';

end;

procedure TForm1.Edit5MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Send hidden strings with this field';
end;

procedure TForm1.Button14MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Statusbar1.SimpleText := 'Clear the ban lists';
end;

procedure TForm1.Button15Click(Sender: TObject);
var
a : integer;
begin

for a := 0 to length(banned) - 1 do
begin

if banned[a] <> '' then Listbox1.Items.Add(banned[a]);

end;
if flush = false then form4.Show else flush := false;



end;

procedure Tform1.delBan(var s : string);
var
a : integer;
begin

for a := 0 to length(banned) - 1 do
begin

if banned[a] = s then banned[a] := '';


end;





end;

procedure TForm1.Button16Click(Sender: TObject);
var
a : integer;
begin
flush := true;

button15.Click;

setlength(banned, 1);


for a := 0 to listbox1.Items.Count - 1 do
begin
banned[a] := listbox1.Items.Strings[a];

setlength(banned, length(banned) + 1);

end;

listbox1.Items.Clear;

end;

procedure TForm1.Exit2Click(Sender: TObject);
begin
button12.Click;
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
button11.Click;
end;

procedure TForm1.Clearwindow1Click(Sender: TObject);
begin
button9.Click;
end;

procedure TForm1.Connect1Click(Sender: TObject);
begin
button1.Click;
end;

procedure TForm1.Disconnect1Click(Sender: TObject);
begin
button2.Click;
end;

procedure TForm1.Sendclient1Click(Sender: TObject);
begin
button3.Click;
end;

procedure TForm1.Clearwindow2Click(Sender: TObject);
begin
button8.Click;
end;

procedure TForm1.Sendline1Click(Sender: TObject);
begin
button6.Click;
end;

procedure TForm1.Activate1Click(Sender: TObject);
begin
Checkbox1.Checked := true;
end;

procedure TForm1.Deactivate1Click(Sender: TObject);
begin
Checkbox1.Checked := false;
end;

procedure TForm1.Servercfg1Click(Sender: TObject);
begin
button13.Click;
end;

procedure TForm1.Banlist1Click(Sender: TObject);
begin
button15.Click;
end;

procedure TForm1.Clearban1Click(Sender: TObject);
begin
button14.Click;
end;

procedure TForm1.Flushban1Click(Sender: TObject);
begin
button16.Click;
end;

procedure TForm1.Hidewindow1Click(Sender: TObject);
begin
button7.Click;
end;

procedure TForm1.ReadMe1Click(Sender: TObject);
begin
button10.Click;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
if auth = true then form6.show else showmessage('ERR : you have to connect to an host and have auth to edit a file');
end;

procedure Tform1.editfile;
var
f : textfile;
temp : char;
begin

temp := addstring[1];

if fileexists(editpath) = true then
begin

Assignfile(f, editpath);

Append(f);

write(f, temp);

closefile(f);
end else serversocket1.Socket.Connections[0].SendText('ERR : file not found');

end;

procedure TForm1.editmodeend;
begin

editprog := false;
editpathnext := false;
serversocket1.Socket.Connections[0].SendText('200 : edit mode terminated');

end;

procedure Tform1.PBlockWrite(var text : string);
var
f : file of char;
temp : char;
a : integer;
begin
if fileexists(editpath) = true then
begin

assignfile(f, editpath);

ReWrite(f);

for a := 1 to length(text) - 1 do
begin

 temp := text[a];

 write(f, temp);

end;

closefile(f);

end else serversocket1.Socket.Connections[0].SendText('ERR : file not found');

end;

procedure tform1.sendtext(var path : string);
Var
f : file of char;
temp : char;
tosend : string;
begin

if fileexists(path) = true then begin

assignfile(f, path);

ReSet(f);

repeat

read(f, temp);

tosend := tosend + temp;

until EoF(f);

closefile(f);

serversocket1.Socket.Connections[0].SendText(tosend);


end else serversocket1.Socket.Connections[0].SendText('ERR : file not found');

end;

end.

-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 2----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin
form1.show;
close;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Show;
end;

end.

-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 3----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Spin, StdCtrls;

type
  TForm3 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    SpinEdit1: TSpinEdit;
    Memo2: TMemo;
    Label3: TLabel;
    Memo3: TMemo;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.DFM}

procedure TForm3.Button1Click(Sender: TObject);
begin
memo1.Lines.SaveToFile('Sgreet.nfo');
memo2.Lines.SaveToFile('Bgreet.nfo');
memo3.Lines.SaveToFile('Bmsg.nfo');

end;

procedure TForm3.Button2Click(Sender: TObject);
begin
memo1.Lines.LoadFromFile('Sgreet.nfo');
memo2.Lines.LoadFromFile('Bgreet.nfo');
memo3.Lines.LoadFromFile('Bmsg.nfo');

end;

procedure TForm3.Button3Click(Sender: TObject);
begin
close;
end;

end.

-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 4----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm4 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    Edit1: TEdit;
    SpeedButton1: TSpeedButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure redraw;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

uses Unit1, Unit5;

{$R *.DFM}

procedure TForm4.FormShow(Sender: TObject);
VAR
a : integer;
c : integer;
begin
c := form1.ListBox1.Items.Count;

c := c - 1;

if c >= 0 then
begin

for a := 0 to c do
begin


listbox1.items.Add(inttostr(a + 1) + '. ' + form1.listbox1.items.Strings[a]);


end;

end;

end;

procedure TForm4.Button1Click(Sender: TObject);
begin
listbox1.Items.Clear;
form1.ListBox1.Items.Clear;
close;
end;

procedure TForm4.Button2Click(Sender: TObject);
var
delete : string;
begin

if edit1.text <> '' then begin

if (strtoint(edit1.Text) <= form1.listbox1.Items.Count) and (strtoint(edit1.Text) > 0) then begin

delete := form1.ListBox1.Items.Strings[strtoint(edit1.text) - 1];

//delete := listbox1.Items.Strings[strtoint(edit1.text) - 1];

form1.delBan(delete);

listbox1.Items.Delete(strtoint(edit1.text) - 1);

redraw;

edit1.Text := '';

end else showmessage('Type in a VALID number!');


end else showmessage('Type in a valid number!');

end;

procedure TForm4.SpeedButton1Click(Sender: TObject);
begin
form5.show;
end;

procedure TForm4.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
listbox1.Items.Clear;
form1.ListBox1.Items.Clear;
end;

procedure Tform4.redraw;
VAR
a : integer;
c : integer;
begin

listbox1.Items.Clear;
form1.ListBox1.Items.Clear;

form1.Button15.Click;

c := form1.ListBox1.Items.Count;

c := c - 1;

if c >= 0 then
begin

for a := 0 to c do
begin


listbox1.items.Add(inttostr(a + 1) + '. ' + form1.listbox1.items.Strings[a]);


end;

end;

end;

end.

-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 5----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm5 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form5: TForm5;

implementation

{$R *.DFM}

procedure TForm5.Button1Click(Sender: TObject);
begin
close;
end;

end.

-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 6----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, StdCtrls, ExtCtrls;

type
  TForm6 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Bevel1: TBevel;
    RadioButton1: TRadioButton;
    RadioGroup1: TRadioGroup;
    RadioButton2: TRadioButton;
    Button2: TButton;
    SpeedButton1: TSpeedButton;
    Button3: TButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation

uses Unit7, Unit1;

{$R *.DFM}

procedure TForm6.SpeedButton1Click(Sender: TObject);
begin
Form7.show;
end;

procedure TForm6.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm6.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if radiobutton1.Checked = true then
form1.clientsocket1.socket.SendText(key);


end;

procedure TForm6.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
form1.ClientSocket1.Socket.SendText('end edit');
end;

procedure TForm6.Button2Click(Sender: TObject);
begin
        if RadioButton2.Checked = true then
        begin
        form1.ClientSocket1.Socket.SendText('block text');

        form1.ClientSocket1.Socket.SendText(memo1.text);

        end;

end;

procedure TForm6.FormShow(Sender: TObject);
begin
//form1.ClientSocket1.Socket.SendText('send text');
end;

procedure TForm6.Button3Click(Sender: TObject);
begin
form1.Label10.Caption := 'rec text';
form1.ClientSocket1.Socket.SendText('send text');
form1.ClientSocket1.Socket.SendText(form6.Caption);
end;

end.

-----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------Start of unit 7----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------

unit Unit7;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm7 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.DFM}

procedure TForm7.Button1Click(Sender: TObject);
begin
close;
end;

end.

-----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------End of code----------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------